iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

這篇主要是要解析 Karpenter 在新增資源的時候會出現的幾個狀況,因為一剛開始接觸 Karpenter 的時候常常會遇到無法正確地讓 Pods 出現在對應的Node 上面,這時候會很慌張,但是更可怕的事會出現更多的狀況是 setting profile can’t match to another,所以就會造成無法確定哪裡錯誤的狀況發生

因此這邊簡單的提出幾個設定的案例

Scenario 1: GPU-Pods must be deployed on GPU Node, and CPU-Pods can’t.

GPU Node 基本上的單價都是比CPU 還要貴的,之後會不會比較便宜不知道,但是就目前的狀況是這樣,但是AWS 在提供 GPU Node 的同時也會提供 CPU 的資源,其實在 GPU 上面去執行 CPU 的Job 是可行的,但是這邊就會被說浪費,因為不需要GPU 為何還需要開GPU?就用CPU 可以省去更多的錢才對。

所以這邊就是要設好前面一天所講的 Toleration 跟 Affinity 還有 Taint 的部分,這邊設置的好就可以有效的安排 Pods 去正確的 Node 上面,就不會造成濫用的狀況

Scenario 2: Using Spot instants to execute training jobs.

另外對於一些 Trainning Jobs 來講其實可以允許部分失敗的,部分的失敗並不會直接影響到最後的結果,這種通常計算量都很大,所以這個部分要來節省計算的花費的話,就只能靠 Spot instants 的部分,而再 Karpenter Previsioner 可以提供只用 Spot instants 的選項。

然而所有需要 Scaling up 的時候就使用 Spot instants 而且可以設置的 type 可以廣一點,不一定要特殊的系列或者 Generation,只要是 Spot instants 的就通通拿來用,這種建議拿比較低階的資源,因為數量比較多,也比較不會被中途搶走,因此就會被比叫長久

不過還是要考慮計算資源的大小。不然還是有可能會造成Node OOM的情況發生

Scenario 3: In the same subnet to reduce transit data fee.

這邊就是網路層面的議題,畢竟 karpenter 也是基於 EC2 的部分去延伸的,而 Ec2 的部分除 Computing resource 之外,Network 也是要設定的,所以設定 Network 的部分則是在 Karpenter AWSNodeTemplate 的 subnet 設定,因為如果AZ 跟 VPC 沒設置好的話可能會造成大量的資料傳輸費(Data transit fee),但是其實只是一個小小的設定沒改到而已,就會造成大量的費用,因此這邊都要特別的小心僅設設定的部分

另外同時對於資料庫的連線,如果沒有在同一個 Subnet 下面的話,可能會造成無法存取的部分,因此對於 Database user 而言,會讓人覺得我設定的都正常,為什麼沒辦法連到 Database

Scenario 4: Which node should I deploy for FastAPI?

另外還有一點就是我要怎麼部署 FastAPI application 到指定的 Node 上面,因為 image 上的Node 開 port 其實對 k8s 來講沒有任何幫助,另外 Node 或者 Pod 上面都要特別的設置

  • Node 上面設置是因為 Security Group 的關係,所以你要讓特定的 white list 可以 access ur service 的話就要套到對的 Security Group ,而 Security Group 就要開啟對應的port 讓後面存取,這部分就是需要小心的地方
  • Pod 的部分設置上要pull 到對的image,然後 pod yaml 則是要開啟適合的 port number ,才不會無法存取。這些部分對end user 來講都是 我怎麼無法使用 ,但是對 MLE 來講這些部分就需要很多小細節來讓這個無誤可以完整的被啟用起來。

Scenario 5: How to mount the disk or storage resouce to EKS based on Karpenter

Mount Disk 我相信大家應該不陌生這個東西,因為在 k8s 裏面, pod 跟 storage 的部分是分開的,所以Pod 雖然有 tempture storage,但是那個只夠放 image ,甚至如果你基本上不甚至空間大小的話, 這邊甚至一個 image with Pytouch 都放不進去,所以這邊要怎麼 Mount 的話,我後面再補充 yaml example 在這邊

Summary of Karpenter

因為 Karpenter 會 AutoScaling ,最後簡單的 Summary 一下,有以下事件發生的時候,要如何冷靜的面對

  1. Scaling 的 Node spec 要找誰 Provisioner
  2. Scaling 的 Network aka subnet 要找 AWSNodeTamplate
  3. Pod 走錯 Node了,要找 Pod 上面的 Toleration 或者 Provisioner 上面設錯 Taint
  4. Pod 總是走到 Default Node,就是沒設定好 Affinity
  5. Pod 一直在 Pendding 的狀態,要確定 Provisioner 有沒有設定到對的資源,資源如果確定沒錯的話,就會是 AWSNodeTemplate 設定錯誤

上一篇
{Day 17: Toleration and Taint, Affinity Concept}
下一篇
{Day 19: Makefile - a tool help to sort command out}
系列文
Don't be a Machine Learning Engineer30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言